﻿using AnlianCommon.Common.Domains.ProductionManagement;
using AnlianCommon.Common.Domains.SheepFarmHouse;
using AnlianCommon.Common.DTO;
using AnlianCommon.Common.Infrastructure.IRepository;
using AnlianCommon.Enum;
using MediatR;
using Microsoft.EntityFrameworkCore;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Globalization;

namespace SheepCommon.API.SheepCommands
{
    public class SheepArchivesImportHandler
    {

    }
//        : IRequestHandler<SheepArchivesImportCommand, Result>
//    {
//        private readonly IBaseRepository<SheepArchives> _sheepArchivesRepository;
//        private readonly IBaseRepository<Cottage> _cottagesRepository;
//        private readonly IBaseRepository<Field> _fieldsRepository;

//        public SheepArchivesImportHandler(IBaseRepository<SheepArchives> sheepArchivesRepository, IBaseRepository<Cottage> cottagesRepository, IBaseRepository<Field> fieldsRepository)
//        {
//            _sheepArchivesRepository = sheepArchivesRepository;
//            _cottagesRepository = cottagesRepository;
//            _fieldsRepository = fieldsRepository;
//        }

//        public async Task<Result> Handle(SheepArchivesImportCommand request, CancellationToken cancellationToken)
//        {
//            var result = new Result() { Code = (int)CommonErrorCode.Search };
//            try
//            {
//                //获取文件扩展名 判断上传的文件类型是否正确
//                var ext = Path.GetExtension(request.File.FileName);
//                if (ext == ".xls" || ext == ".xlsx")
//                {

//                }
//                else
//                {
//                    result.Msg = "您上传的文件类型不正确";
//                    return result;
//                }
//                using (MemoryStream ms = new MemoryStream())
//                {
//                    request.File.CopyTo(ms);
//                    ms.Position = 0;
//                    //根据文件扩展名创建对应的工作簿对象(HSSFWorkbook用于.xls，XSSFWorkbook用于.xlsx)
//                    //获取工作簿
//                    IWorkbook wb = null;
//                    //创建97-2003
//                    if (ext == ".xls")
//                    {
//                        wb = new HSSFWorkbook(ms);
//                    }
//                    //创建2007及以上版本
//                    else
//                    {
//                        wb = new XSSFWorkbook(ms);
//                    }
//                    //获取sheet 获取工作簿中的第一个工作表
//                    ISheet sheet = wb.GetSheetAt(0);
//                    int totalRows = sheet.LastRowNum;//总行数
//                    int totalCells = sheet.GetRow(0).LastCellNum;//总列数
//                    // 创建一个用于存储解析后的数据的列表
//                    var farrowingsList = new List<SheepArchives>();
//                    //循环总行数 开头必须是1 不然从表头开始
//                    //遍历工作表的每一行（从第二行开始，因为第一行通常是表头）
//                    for (int i = 1; i <= totalRows; i++)
//                    {
//                        //获取当前行
//                        IRow row = sheet.GetRow(i);
//                        //这个类必须写到循环里边 不然你批量添加只能添加一行
//                        var dto = new SheepArchives();// 在循环内创建新的对象实例
//                        //下标从0开始 导入时 外键需进行判断 客户不知道你是外键 只会输入文字 需要在后台判断
//                        var earnumber = row.GetCell(0).ToString();
//                        var basic = await (await _sheepArchivesRepository.GetAll()).Where(c => c.RecordAuricle == earnumber).FirstOrDefaultAsync();
//                        dto.RecordId = basic.RecordId;
//                        dto.RecordAuricle = row.GetCell(1).ToString();
//                        dto.RecordCorpuscle = row.GetCell(2).ToString();
//                        dto.RecordMother = row.GetCell(3).ToString();
//                        dto.RecordFather = row.GetCell(4).ToString();
//                        dto.RecordBreed = row.GetCell(5).ToString();
//                        dto.RecordBorn = row.GetCell(6).ToString();


//                        //日期转换
//                        //日期在excel表中必须是年月日格式 但不能加时分秒 (注意!!!!)
//                        string inputDate = row.GetCell(7).ToString();
//                        string[] multipleFormats = { "dd-M月-yyyy", "yyyy-M-dd" };
//                        DateTime parsedDate;
//                        foreach (var format in multipleFormats)
//                        {
//                            if (DateTime.TryParseExact(inputDate, new[] { format }, CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate))
//                            {
//                                dto.RecordDate = Convert.ToDateTime(parsedDate.ToString("yyyy-MM-dd"));
//                                break;//成功解析后跳出循环
//                            }
//                        }
//                        dto.RecordSite = row.GetCell(8).ToString();
//                        dto.RecordWeight = Convert.ToDecimal(row.GetCell(9).ToString());
//                        dto.RecordRemark = row.GetCell(10).ToString();
//                        //日期转换
//                        //日期在excel表中必须是年月日格式 但不能加时分秒 (注意!!!!)
//                        string admissionDate = row.GetCell(11).ToString();
//                        string[] admissionDateArr = { "dd-M月-yyyy", "yyyy-M-dd" };
//                        DateTime admissionDates;
//                        foreach (var item in admissionDateArr)
//                        {
//                            if (DateTime.TryParseExact(admissionDate, new[] { item }, CultureInfo.InvariantCulture, DateTimeStyles.None, out admissionDates))
//                            {
//                                dto.AdmissionDate = Convert.ToDateTime(admissionDate.ToString("yyyy-MM-dd"));
//                                break;//成功解析后跳出循环
//                            }
//                        }
//                        dto.Sex = row.GetCell(12).ToString();
//                        dto.Gene = row.GetCell(13).ToString();
//                        dto.FarmId = Convert.ToInt32(row.GetCell(14).ToString());
//                        dto.FieldId = Convert.ToInt32(row.GetCell(15).ToString());
//                        dto.CottageId = Convert.ToInt32(row.GetCell(16).ToString());
//                        dto.SheepImage = row.GetCell(17).ToString();
//                        dto.Stage = Convert.ToInt32(row.GetCell(18).ToString());
//                        dto.ProductionGrade = Convert.ToInt32(row.GetCell(19).ToString());
//                        dto.SalesGrade = Convert.ToInt32(row.GetCell(20).ToString());
//                        dto.ReproductiveState = Convert.ToInt32(row.GetCell(21).ToString());
//                        dto.ReproductiveStateDays = Convert.ToInt32(row.GetCell(22).ToString());
//                        dto.PresenceStatus = Convert.ToInt32(row.GetCell(23).ToString());
//                        dto.WeanWeight = Convert.ToInt32(row.GetCell(25).ToString());
//                        dto.WeanDate = row.GetCell(26).ToString());


//                }
//            }
//            }
//            catch (Exception)
//            {

//                throw;
//            }
//}
//    }
}
